www.gusucode.com > matlab最优化程序源码---书籍 > matlab最优化程序/光盘程序/第10章 线性规划/SimpleMthd.m
function [x,minf] = SimpleMthd(A,c,b,baseVector) sz = size(A); nVia = sz(2); n = sz(1); xx = 1:nVia; nobase = zeros(1,1); m = 1; for i=1:nVia if(isempty(find(baseVector == xx(i),1))) nobase(m) = i; m = m + 1; else ; end end bCon = 1; M = 0; while bCon nB = A(:,nobase); ncb = c(nobase); B = A(:,baseVector); cb = c(baseVector); xb = inv(B)*b; f = cb*xb; w = cb*inv(B); for i=1:length(nobase) sigma(i) = w*nB(:,i)-ncb(i); end [maxs,ind] = max(sigma); if maxs <= 0 minf = cb*xb; vr = find(c~=0 ,1,'last'); for l=1:vr ele = find(baseVector == l,1); if(isempty(ele)) x(l) = 0; else x(l)=xb(ele); end end bCon = 0; else y = inv(B)*A(:,nobase(ind)); if y <= 0 disp('不存在最优解!'); x = NaN; minf = NaN; return; else minb = inf; chagB = 0; for j=1:length(y) if y(j)>0 bz = xb(j)/y(j); if bz<minb minb = bz; chagB = j; end end end tmp = baseVector(chagB); baseVector(chagB) = nobase(ind); nobase(ind) = tmp; end end M = M + 1; if (M == 1000000) disp('找不到最优解!'); x = NaN; minf = NaN; return; end end